﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
using System.Web.Security;

namespace E5_KhuyenMaiVang.Models
{     
    [MetadataType(typeof(DealView))]
    public partial class DEAL : IValidatableObject
    {
        public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
        {
            var start = new[] { "StartDate" };
            var end = new[] { "EndDate" };
            var valid = new[] { "ValidDate" };
            var invalid = new[] { "InvalidDate" };            

            if (StartDate < DateTime.Now)
                yield return new ValidationResult("Ngày bắt đầu không thể ở trong quá khứ", start);

            if (EndDate < StartDate)
                yield return new ValidationResult("Ngày kết thúc không thể sớm hơn ngày bắt đầu", end);

            if (ValidDate < EndDate)
                yield return new ValidationResult("Ngày bắt đầu sử dụng không thể sớm hơn ngày kết thúc deal", valid);

            if (InvalidDate < ValidDate)
                yield return new ValidationResult("Ngày kết thúc sử dụng không thể sớm hơn ngày bắt đầu sử dụng", invalid);
        }
    }

    public class DealView
    {
        private static GoldDealEntities db = new GoldDealEntities();

        [Required]
        public int DealID { get; set; }

        [Required(ErrorMessage = "Bạn chưa nhập tên sản phẩm")]
        [Display(Name = "Tên sản phẩm")]
        public string DealName { get; set; }

        [Required(ErrorMessage = "Bạn chưa nhập giá thị trường")]
        [Display(Name = "Giá thị trường")]        
        public double Price { get; set; }

        [Required(ErrorMessage = "Bạn chưa nhập giá khuyến mãi")]
        [Display(Name = "Giá khuyến mãi")]
        public double Discount { get; set; }

        [Required(ErrorMessage = "Bạn chưa nhập ngày bắt đầu")]
        [DataType(DataType.DateTime)]
        [Display(Name = "Ngày bắt đầu")]        
        public DateTime StartDate { get; set; }

        [Required(ErrorMessage = "Bạn chưa nhập ngày kết thúc")]
        [DataType(DataType.DateTime)]
        [Display(Name = "Ngày kết thúc")]   
        public DateTime EndDate { get; set; }

        [Required(ErrorMessage = "Bạn chưa nhập ngày bắt đầu sử dụng")]
        [DataType(DataType.DateTime)]
        [Display(Name = "Bắt đầu sử dụng")]   
        public DateTime ValidDate { get; set; }

        [Required(ErrorMessage = "Bạn chưa nhập ngày kết thúc sử dụng")]
        [DataType(DataType.DateTime)]
        [Display(Name = "Kết thúc sử dụng")]   
        public DateTime InvalidDate { get; set; }

        [Required(ErrorMessage = "Bạn chưa nhập mô tả sản phẩm")]
        [Display(Name = "Mô tả")]
        public string Description { get; set; }

        [Required(ErrorMessage = "Bạn chưa nhập hình ảnh sản phẩm")]
        [Display(Name = "Hình ảnh")]
        public string Image { get; set; }

        [Required(ErrorMessage = "Bạn chưa nhập chú thích sản phẩm")]
        [Display(Name = "Chú thích")]
        public string Spec { get; set; }

        [Required]
        public int SoldQuantity { get; set; }

        [Required(ErrorMessage = "Bạn chưa nhập số lượng tối đa")]
        [Display(Name = "Số lượng tối đa")]
        public int MaxQuantity { get; set; }

        [Required(ErrorMessage = "Bạn chưa nhập số lượng tối thiểu")]
        [Display(Name = "Số lượng tối thiểu")]
        public int MinQuantity { get; set; }

        [Required(ErrorMessage = "Bạn chưa chọn tình trạng")]
        [Display(Name = "Tình trạng")]
        public int StatusID { get; set; }

        [Required(ErrorMessage = "Bạn chưa chọn doanh nghiệp")]
        [Display(Name = "Doanh nghiệp")]
        public int CompanyID { get; set; }

        [Required(ErrorMessage = "Bạn chưa chọn thành phố")]
        [Display(Name = "Thành phố")]
        public int CityID { get; set; }

        [Required(ErrorMessage = "Bạn chưa chọn loại")]
        [Display(Name = "Loại")]
        public int CategoryID { get; set; }
    }

    public class Category
    {
        public int CategoryID { get; set; }
        public string CategoryName { get; set; }
    }

}